package com.zzyl.test;


import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class QianfanChatClient {

    // 百度千帆API地址
    private static final String API_URL = "https://qianfan.baidubce.com/v2/chat/completions";

    // 你的访问令牌，需要替换为实际的token
    private static final String ACCESS_TOKEN = "bce-v3/ALTAK-zPwfNbaZY4bMTbyzg8Su5/cd470eddfb7ca4e4a648ee20c472bbeae7d2a2d6";

    private final RestTemplate restTemplate;

    public QianfanChatClient() {
        this.restTemplate = new RestTemplate();
    }

    /**
     * 发送消息给大模型并获取响应
     * @param systemContent 系统提示信息
     * @param userContent 用户输入内容
     * @return 大模型的响应结果
     */
    public String chat(String systemContent, String userContent) {
        // 创建请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.set("Authorization", "Bearer " + ACCESS_TOKEN);

        // 构建请求体
        Map<String, Object> requestBody = new HashMap<>();
        requestBody.put("model", "ernie-4.0-8k");

        // 构建消息列表
        List<Map<String, String>> messages = new ArrayList<>();

        // 添加系统消息
        Map<String, String> systemMessage = new HashMap<>();
        systemMessage.put("role", "system");
        systemMessage.put("content", systemContent);
        messages.add(systemMessage);

        // 添加用户消息
        Map<String, String> userMessage = new HashMap<>();
        userMessage.put("role", "user");
        userMessage.put("content", userContent);
        messages.add(userMessage);

        requestBody.put("messages", messages);

        // 创建请求实体
        HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);

        try {
            ResponseEntity<String> response = restTemplate.postForEntity(API_URL, requestEntity, String.class);
            if (response.getStatusCode().is2xxSuccessful()) {
                String jsonResponse = response.getBody();

                // 4. 解析JSON，提取content字段
                JSONObject rootObj = JSONObject.parseObject(jsonResponse); // 解析根节点
                JSONArray choicesArr = rootObj.getJSONArray("choices");  // 获取choices数组
                if (choicesArr != null && choicesArr.size() > 0) {
                    JSONObject firstChoice = choicesArr.getJSONObject(0); // 取第一个choice（通常只有一个）
                    JSONObject messageObj = firstChoice.getJSONObject("message"); // 获取message对象
                    return messageObj.getString("content").trim(); // 提取content并去除前后空格
                }
                return "JSON解析失败：未找到choices数组数据";
            } else {
                return "请求失败，状态码: " + response.getStatusCodeValue();
            }
        } catch (Exception e) {
            return "请求/解析错误: " + e.getMessage();
        }
    }

    // 测试：控制台只输出content内容
    public static void main(String[] args) {
        QianfanChatClient client = new QianfanChatClient();
        String content = client.chat("平台助手", "如果阎王叫你三更死，但你一更就死了，那三更还会死吗？");
        System.out.println("大模型回复：");
        System.out.println(content);
        // 输出结果：关键点：用真诚化解尴尬，用行动弥补不足，让领导感受到“被重视”而非“被分配”。
    }
}